/*
 * consola.c
 *
 *  Created on: 18/11/2011
 *      Author: utn_so
 */

#include "consola.h"


extern struct bootSector* bootSectorDisco;

int32_t fsinfo();
int32_t finfo(char *path);

void* consola()
{
	char*  leido = (char*)malloc (sizeof(char)*(256 + 6 + 1));
	char*  elcomando = (char*)malloc (sizeof(char)*6);
	char*  elparametro = (char*)malloc (sizeof(char)*256);

	//	Hablemos a cuatro manos
	while(1)
	{
		fprintf(stderr,"PROMPT?>");
		fgets(leido,256 + 6 + 1,stdin);
		//fprintf(stderr,"Command Receive: %s",leido);
		elcomando=strtok(leido," ");
		elcomando[strlen(elcomando)]='\0';
		elparametro=strtok(NULL,"\n");
		//fprintf(stderr,"Comando: %s\nParametro: %s \n",elcomando,elparametro);

		if(strcmp(elcomando,"fsinfo\n")==0)
			fsinfo();

		else if(strcmp(elcomando,"finfo")==0)
		{
			if(elparametro!=NULL)
				finfo(elparametro);
			else
				printf("Error en el parametro. \n");
		}
		else
			printf("Error de Comando. \n");

	}

	return NULL;
}

int32_t fsinfo()
{

	mostrarInfoFileSystem();

	return 0;
}


int32_t finfo(char *path)
{

	ListaDirectorios* dirAux = abrirArchivo(path);
	if(dirAux!= NULL)
		{
		int32_t i = 0;
		if(dirAux -> nombreLargo != NULL)
			printf("Clusters del archivo %s\n", dirAux -> nombreLargo);

	else
		{
		printf("Clusters del archivo ");
		unsigned char* nombre = malloc(sizeof(unsigned char)*20);
		traerNombreShort(dirAux->directorio, nombre);
		printf("%s: \n",nombre);
		free(nombre);
		}

		//	lista de clusters
		crearCadenaCluster(bootSectorDisco, dirAux);

		while(1)
		{
			if(dirAux -> clusters[i] != SIGNAL_NO_MORE)
			{
				printf("%i", dirAux -> clusters[i]);
				printf("\t");
				i++;
			}
			else
				break;
			if(i>=20)
				break;
		}
		printf("\n");
		free(dirAux->clusters);
	}

	else
		printf("Archivo/Ruta invalida\n");

	return 0;
}
